package org.mii.safeguard_v1.tools.itext;

import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;

/**
 * 创建字体的工厂类
 * 
 * @author QUANXIWEI
 */
public class FontFactory {

	protected final static Logger logger = LoggerFactory
			.getLogger(FontFactory.class);

	private static BaseFont bfST = null;
	private static BaseFont bfSH = null;
	private static int defaultFontSize = 12;

	/**
	 * 字体类型 目前只有两种
	 * <li> 宋体:SONG
	 * <li> 黑体:HEI
	 * 
	 * @author QUANXIWEI
	 * 
	 */
	public static enum FontType {
		HEI, SONG
	}

	static {
		try {
			bfST = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
					BaseFont.NOT_EMBEDDED);
			bfSH = BaseFont.createFont("/font/simhei.ttf", BaseFont.IDENTITY_H,
					BaseFont.NOT_EMBEDDED);
		} catch (DocumentException e) {
			logger.error(e.getMessage());
		} catch (IOException e) {
			logger.error(e.getMessage());

		}
	}

	/**
	 * 创建字体
	 * 
	 * @author QUANXIWEI
	 * @param fontType：字体类型
	 *            FontType.HEI, FontType.SONG
	 * @param size:字体大小
	 *            int
	 * @param style:字体样式
	 *            <li> Font.HELVETICA;//==Font.BOLD
	 *            <li> Font.STRIKETHRU;//删除样式
	 *            <li> Font.SYMBOL;//粗斜体
	 *            <li> Font.TIMES_ROMAN;//英文罗马字体 中文有点斜体的意思
	 *            <li> Font.UNDEFINED;//等同于NORMAL
	 *            <li> Font.UNDERLINE;//下划线
	 *            <li> Font.ZAPFDINGBATS;//下划线
	 *            <li> Font.BOLD;//粗体
	 *            <li> Font.NORMAL;//普通
	 *            <li> Font.ITALIC;//斜体
	 * 
	 * <li> 可以组合使用 比如下划线且粗体 Font.BOLD|Font.UNDERLINE
	 * @return {@link Font}
	 */
	public static Font creatFont(FontType fontType, int size, int style) {
		int baseStyle = Font.NORMAL;
		BaseFont baseFont = null;
		switch (fontType) {
		case HEI:
			baseFont = bfSH;
			break;
		case SONG:
			baseFont = bfST;
			break;
		default:
			break;
		}

		if (baseFont == null) {
			baseFont = bfST;
		}
		if (size < 0) {
			size = defaultFontSize;
		}

		Font font = new Font(baseFont, size, baseStyle | style);
		return font;
	}

	/**
	 * 创建黑体字
	 * 
	 * @see createFont
	 */
	public static Font createFontHei(int size, int style) {
		return creatFont(FontType.HEI, size, style);
	}

	/**
	 * 创建宋体字
	 * 
	 * @see createFont
	 */
	public static Font createFontSong(int size, int style) {
		return creatFont(FontType.SONG, size, style);
	}

}
